]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
NetworkMenu: fix VPN connection state
authorGiovanni Campagna <gcampagna@src.gnome.org>
Thu, 31 Mar 2011 20:43:05 +0000 (22:43 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Sat, 2 Apr 2011 18:40:12 +0000 (20:40 +0200)
It was always reporting true, even if disconnected. At the same time,
add a signal that is emitted when state changes and update the UI
accordingly.
In the future (with another libnm-glib API break) we should use the
NMVPNConnection object to track the connection state, so that we can
show if we're connecting or we need authentication.

https://bugzilla.gnome.org/show_bug.cgi?id=646380

js/ui/status/network.js

index ffcab09b24b08e95458713c92dd1d6eea2c068d7..7616542c84db943fdaa907ca7afe1cd45b499e11 100644 (file)
@@ -254,6 +254,11 @@ NMWiredSectionTitleMenuItem.prototype = {
             return;
         }
 
+        // Immediately reset the switch to false, it will be updated appropriately
+        // by state-changed signals in devices (but fixes the VPN not being in sync
+        // if the ActiveConnection object is never seen by libnm-glib)
+        this._switch.setToggleState(false);
+
         if (this._switch.state)
             this._device.activate();
         else
@@ -940,7 +945,13 @@ NMDeviceVPN.prototype = {
     },
 
     get connected() {
-        return true;
+        return !!this._activeConnection;
+    },
+
+    setActiveConnection: function(activeConnection) {
+        NMDevice.prototype.setActiveConnection.call(this, activeConnection);
+
+        this.emit('active-connection-changed');
     },
 
     _shouldShowConnectionList: function() {
@@ -1539,6 +1550,9 @@ NMApplet.prototype = {
             device: new NMDeviceVPN(this._client),
             item: new NMWiredSectionTitleMenuItem(_("VPN Connections"))
         };
+        this._devices.vpn.device.connect('active-connection-changed', Lang.bind(this, function() {
+            this._devices.vpn.item.updateForDevice(this._devices.vpn.device);
+        }));
         this._devices.vpn.item.updateForDevice(this._devices.vpn.device);
         this._devices.vpn.section.addMenuItem(this._devices.vpn.item);
         this._devices.vpn.section.addMenuItem(this._devices.vpn.device.section);